﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Classes_and_Interfaces.Exceptions;


namespace Classes_and_Interfaces
{
    public class Note
    {
        /////////////////////////////////////////////////////////////////////////////////////////////////////////
        // КОНСТАНТЫ ////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////

        const int BASS = 0, TENOR = 1, ALT = 2, SOPRANO = 3;
        const int I = 1, II = 2, III = 3, IV = 4, V = 5, VI = 6, VII = 0;

        /////////////////////////////////////////////////////////////////////////////////////////////////////////
        // ПОЛЯ /////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////

        private int voice; //голос, соответствующий ноте
        private int stupen; //ступень ноты в тональности     
        private string alteration; //альтерация ноты

        /////////////////////////////////////////////////////////////////////////////////////////////////////////
        // КОНСТРУКТОРЫ /////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////

        //по голосу и ступени ///////////////////////////////////////////////////////////////////////////////////
        public Note(int voice, int stupen,string alteration)
        {
            //проверяем, не написана ли чушь в параметре голоса, если что, ИСКЛЮЧЕНИЕ
            if ((voice != BASS) && (voice != TENOR) && (voice != ALT) && (voice != SOPRANO))
                throw new UnknowVoiceOfNote();            
            //проверяем, не написана ли чушь в параметре сутпени, если что, ИСКЛЮЧЕНИЕ
            if ((stupen < 0) || (stupen > 6))                
                throw new ArgumentException();

            this.voice = voice;
            this.stupen = stupen;
            this.alteration=alteration;
        }
        
        /////////////////////////////////////////////////////////////////////////////////////////////////////////
        // МЕТОДЫ ///////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////        

        public int getVoice()
        {
            return voice;
        }

        public int getStupen()
        {
            return stupen;
        }
        
        //public void setNoteSign(string sign)
        //{
        //    this.sign = sign;
        //}
    }
}
